package Leetcode;

/**
 * 编写一个函数来查找字符串数组中的最长公共前缀。
 * 如果不存在公共前缀，返回空字符串 ""。
 */
public class 力扣14_最长公共前缀 {

    /**
     * 按序拿第一个字符串的字符 和后面字符串比较
     */
    public static String longestCommonPrefix1(String[] strs) {
        String pre = "";
        for (int index = 0; index < strs[0].length(); index++) {
            char c = strs[0].charAt(index);
            for (int i = 1; i < strs.length; i++) {
                if (index > strs[i].length() || strs[i].charAt(index) != c) {
                    return pre;
                }
            }
            pre = strs[0].substring(0, index + 1);
        }
        return pre;
    }

    /**
     * 按序拿第一个字符串的字符 和后面字符串比较
     * 优化变量
     */
    public static String longestCommonPrefix2(String[] strs) {
        for (int index = 0; index < strs[0].length(); index++) {
            char c = strs[0].charAt(index);
            for (int i = 1; i < strs.length; i++) {
                if (index > strs[i].length() || strs[i].charAt(index) != c) {
                    return strs[0].substring(0, index);
                }
            }
        }
        return strs[0];
    }

    /**
     * 官网 水平扫描法
     * 将第一个字符串 依次和后面每一个找出公共前缀
     */
    public static String longestCommonPrefix3(String[] strs) {
        if (strs.length == 0) return "";
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++)
            while (strs[i].indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) return "";
            }
        return prefix;
    }

    public static void main(String[] args) {
        System.out.println(longestCommonPrefix3(new String[]{"flower", "flow", "flight"}));
    }
}
